package com.ssc.chain.tcfp.core.client;

import java.io.IOException;
import java.io.InputStream;

/**
 * @author mingjian
 * @version 1.0
 * Create by 2025/7/10 17:45
 */
public interface UploadStore {

    /**
     * 初始化上传存储（新建或恢复）
     *
     * @param uploadId 上传标识
     * @param length   文件总长度
     * @throws Exception 异常
     */
    void createUpload(String uploadId, long length) throws Exception;

    /**
     * 追加数据
     *
     * @param uploadId 上传标识
     * @param offset   追加起始位置
     * @param data     输入流
     * @param length   数据长度
     * @throws Exception 异常
     */
    void append(String uploadId, long offset, InputStream data, long length) throws Exception;

    /**
     * 获取当前上传偏移量（已上传字节数）
     *
     * @param uploadId 上传标识
     * @return 已上传字节数
     * @throws Exception 异常
     */
    long getOffset(String uploadId) throws Exception;

    /**
     * 完成上传，做后续处理
     *
     * @param uploadId 上传标识
     * @throws Exception 异常
     */
    void complete(String uploadId) throws Exception;

    /**
     * 获取存储文件的输入流，供后续处理或下载
     *
     * @param uploadId 上传标识
     * @return 输入流
     * @throws Exception 异常
     */
    InputStream getInputStream(String uploadId) throws Exception;


    /**
     * 获取上传文件总长度
     * @param uploadId 上传标识
     * @return 文件总大小，-1 表示未知
     */
    long getUploadLength(String uploadId) throws IOException;

}
